package entity

import (
	"time"

	"code.bydev.io/cht/customer/kyc_admin_service/internal/constant"
)

type KYCActionClientDetail struct {
	ClientIP string `json:"client_ip"` // 通道返回的客户端IP
	From     string `json:"from"`      // 中台自己记录的设备细分（Android、iOS、Web）
	Source   string `json:"source"`    // 通道返回的客户端的源
}

type KYCActionAddressDetail struct {
	Country     string `json:"country"`
	State       string `json:"state"`
	City        string `json:"city"`
	FullAddress string `json:"full_address"`
	PostalCode  string `json:"postal_code"`
}

type KYCActionDocDetail struct {
	DocFront       string `json:"doc_front"`
	DocBack        string `json:"doc_back"`
	PersonalNumber string `json:"personal_number"`
}

type KYCActionFaceDetail struct {
	FaceImage         string `json:"face_image"`
	LivenessImage     string `json:"liveness_image"`
	SimilarityChecked string `json:"similarity_checked"`
	ValidityChecked   string `json:"validity_checked"`
}

// KYCAction KYC认证记录
type KYCAction struct {
	ID                   int64                        // ID
	MemberID             int64                        // UID
	SiteID               int32                        // 申请KYC站点(0:主站,1:韩国站,2:土耳其站)
	ExternalUID          string                       // 外部 UID
	RecordID             string                       // 记录id(sumsub: applicant_id, jumio: workflow_execution_id, scanReference)
	AccountID            string                       // 账号id(sumsub:applicant_id, jumio: account_id)
	VerifyContent        string                       // 认证内容，数组，以‘,’分隔
	Level                constant.KYCLevel            // KYC等级(0-3)
	Channel              constant.KYCProvider         // 认证通道(1:sumsub,2:jumio)
	Action               constant.KYCAction           // 动作状态(0:ticket, 1:init, 2:pending, 3:complete, 4:reset)
	Decision             constant.KYCDecision         // 最终认证结果(0:unknown,1:success,2:reject)
	ProviderDecision     constant.KYCDecision         // 服务商认证结果(0:unknown, 1:success, 2:reject)
	RejectReason         string                       // 最终拒绝原因
	ProviderRejectReason string                       // 服务商拒绝原因
	DocType              constant.KYCDocType          // 证件大类
	DocSubtype           int32                        // 证件子类
	DocNumber            string                       // 证件号(密文)
	Country              string                       // 证件签发国(KYC国籍)
	Nationality          string                       // 原籍
	AddressCountry       string                       // 居住国
	FirstName            string                       // 名字(密文)
	LastName             string                       // 姓氏(密文)
	Dob                  string                       // 出生日期(密文)
	IdempotentID         string                       // 幂等id
	ReviewTime           int64                        // 验证时间(时间戳 ms)
	ProviderCreateAt     int64                        // 供应商回调时间(时间戳 ms)
	CreatedAt            time.Time                    // 记录创建时间
	UpdatedAt            time.Time                    // 记录更新时间
	DocDetail            *KYCActionDocDetail          // 证件详情，JSON(密文)
	IssuingDate          time.Time                    // 签发日期
	ExpireDate           time.Time                    // 有效期
	FaceDetail           *KYCActionFaceDetail         // 人脸详情，JSON(密文)
	AddressDetail        *KYCActionAddressDetail      // 地址详情，JSON(密文)
	ClientDetail         *KYCActionClientDetail       // 客户端详情，JSON
	SerialType           constant.KYCVerificationType // 证件序列类型(0:第一证件;1:第二证件)
	IsTransfer           constant.KYCTransfer         // KYC转移标记(0:非转移;1:转入;2:转出)
	SelectDocType        constant.KYCDocType          // 选择证件类型(0:Unspecified;1:ID;2:PP;3:DL;4:RP;5:Bill;33:BVN)
	SelectCountry        string                       // 用户选择国家(3字码)
	BusinessID           constant.BusinessID          // 业务来源(global:Platform;card:Card;nft:NFT;faas:Yeeha)
	DocImgFrontS3Info    *KYCImageS3Info
	DocImgBackS3Info     *KYCImageS3Info
	DocImgSelfieS3Info   *KYCImageS3Info
}
